12.3.3 チャネルのクローズ
これ以上書き込む必要がなくなったら組み込みのclose関数を使ってチャネルをクローズする
code:go
close(ch)
クローズ後のチャネルへの書き込みや再クローズはパニックになる
クローズ後のチャネルからの読み込みは許可されている
バッファリングされていて、まだ読み込まれていない値がある場合は順番に読み込まれる。全て読み込まれている場合はnilが返る
バッファリングされていない場合、チャネルの要素型のゼロ値が返る
「チャネルに書き込まれて戻されたゼロ値」と「チャネルがクローズされていたために戻されたゼロ値を区別する必要が生じる。これは、カンマ ok イディオムを使って検知できる
code:go
v, ok := <-ch
okがtrueになればチャネルはオープンな状態で、vにはチャネルchから読み込まれた値が入っている。okがfalseならチャネルはクローズされている